package com.dayu.springbootai.repository;

import org.springframework.stereotype.Component;

import java.util.*;

/**
 * 基于内存的聊天历史仓库实现类
 * 使用HashMap存储不同类型会话的ID列表
 * 实现了聊天历史记录的保存和查询功能
 * 
 * @author dayu
 * @date 2025/4/8 23:29
 */
@Component
public class InMemoryChatHistoryRepository implements ChatHistoryRepository{
    /**
     * 聊天历史存储Map
     * Key: 会话类型 (如"chat"、"service"等)
     * Value: 该类型下所有会话ID的列表
     */
    private final Map<String,List<String>> chatHistory = new HashMap();

    /**
     * 保存会话ID
     * 如果该类型的会话列表已存在且不包含该会话ID，则添加；
     * 如果该类型的会话列表不存在，则创建新列表并添加会话ID
     * 
     * @param type 会话类型
     * @param chatId 会话ID
     */
    @Override
    public void save(String type, String chatId) {
        // 检查是否存在该类型的会话列表
        if (chatHistory.containsKey(type)){
            List<String> list = chatHistory.get(type);
            // 检查列表中是否已包含该会话ID，避免重复添加
            if (list.contains(chatId)){
                return;
            }
            list.add(chatId);
        }else {
            // 如果不存在该类型的会话列表，则创建新列表并添加
            List<String> list = new ArrayList<>();
            list.add(chatId);
            chatHistory.put(type, list);
        }
    }

    /**
     * 获取指定类型的会话ID列表
     * 
     * @param type 会话类型
     * @return List<String> 会话ID列表，如果不存在则返回空列表
     */
    @Override
    public List<String> getChatIds(String type) {
        return chatHistory.getOrDefault(type, List.of());
    }
}